Existing methods for data synchronization between a device and a server are generally carried out based on a predefined set of attributes. Typically, data synchronization on the basis of an arbitrary set of attributes, either internal or external to the synchronization framework, is not supported. Similarly, geographically distributing data sets is impractical employing existing synchronization methods and systems.
Also, existing data synchronization methods do not determine how and in what order the data synchronization is carried out. For example, existing synchronization frameworks do not provide data synchronization on the basis of random or otherwise arbitrary attributes that may influence priority ordering of data synchronization (e.g. that data set of highest priority or highest business value should be synchronized first).
Typically, existing data synchronization methods do not provide a mechanism to logically “bundle” related data sets into logical units. Thus, it is not possible to attach a meaningful action to a group of files to be synchronized or to execute any arbitrary program and/or script after successful synchronization of a group of files.
Additionally, with existing data synchronization approaches, in the event of connection disruption between a client device and a server, resumption of data synchronization from the specific bundle that experienced the failure during the last connection disruption is not supported. Problematically, in existing data synchronization methods the synchronization server performs most of the processing and returns responses to clients. Typically these responses are not optimally compressed for lower bandwidth communication, making existing synchronization framework architectures relatively unscalable. In addition, existing methods do not support caching of most common server responses to make data synchronization more efficient.